Pri pisanju sporočil na prenosne telefonu moramo vsakič, ko dve sosednji črki
pripadata isti tipki prenosnega telefona, malce počakati.
Če želimo na primer natipkati besedilo bacil, moramo pritisniti
tipke: 2 2 (za b), 2 (za a), 2 2 2 (za c), 4 4 4 (za i), 5 5 5 (za l).
To pomeni, da moramo dvakrat malce počakati - preden natipkamo a in preden
natipkamo c.
Naloga
Imamo funkcijo sms(besedilo), ki kot parameter besedilo sprejme niz
znakov angleške abecede in presledkov, vrne pa število čakanj, da lahko
natipkamo naslednji znak. Predpostavimo da besedilo vsebuje le male črke
angleške abecede. Vendar pa se je programer na žalost zelo neroden in je
pomešal vrstice.
def sms(besedilo):
"""funkcija kot parameter besedilo dobi niz znakov in vrne število kolikokrat
moramo počakati, da natipkamo besedilo na telefon"""
tipkovnica = {' ':1, 'a':2, 'b':2, 'c':2, 'd':3, 'e':3, 'f':3, 'g':4, 'h':4,
'i': 4, 'j':5, 'k':5, 'l':5, 'm':6, 'n':6, 'o':6, 'p':7, 'q':7, 'r':7, 's':7,
't': 8, 'u':8, 'v':8, 'w':9, 'x':9, 'y':9, 'z':9}
if len(besedilo) < 2:
prejsnja = besedilo[0]
for crka in besedilo[1:]:
prejsnja = crka
cakanje += 1
if tipkovnica[crka] == tipkovnica[prejsnja]:
else:
cakanje = 0
return cakanje
return cakanje
Pomagaj mu popraviti funkcijo. Uredi vrstice in jih ustrezno zamakni tako, da
bo funkcija delovala pravilno.
Argument besedilo vsebuje en niz sestavljen iz malih znakov angleške abecede
in presledkov.
Izhodni podatki
Funkcija vrne eno samo število (število čakanj).
Primer
Vhod
>>> sms('rabarbara in brokoli')
Izhod
3
Uradna rešitev
def sms(besedilo):
"""funkcija kot parameter besedilo dobi niz znakov in vrne število kolikokrat
moramo počakati, da natipkamo besedilo na telefon"""
cakanje = 0
tipkovnica = {' ':1, 'a':2, 'b':2, 'c':2, 'd':3, 'e':3, 'f':3, 'g':4, 'h':4,
'i': 4, 'j':5, 'k':5, 'l':5, 'm':6, 'n':6, 'o':6, 'p':7, 'q':7, 'r':7, 's':7,
't': 8, 'u':8, 'v':8, 'w':9, 'x':9, 'y':9, 'z':9}
if len(besedilo) < 2:
return cakanje
prejsnja = besedilo[0]
for crka in besedilo[1:]:
if tipkovnica[crka] == tipkovnica[prejsnja]:
cakanje += 1
else:
prejsnja = crka
return cakanje
2004.2.1
1. podnaloga
Naloga
Imamo funkcijo novo_zaporedje(n, vhodno_zaporedje) , ki sprejme naravno
število n in vhodno zaporedje vhodno_zaporedje, v katerem je n števil
večjih od $0$ in manjših ali enakih n (med seboj ne nujno različnih). Funkcija
gre po vrsti po vhodnem zaporedju ter v novo izhodno zaporedje doda za vsako
število novo najmanjše število, ki je večje ali enako trenutnemu številu v
vhodnem zaporedju. Če je novo število večje od n, funkcija namesto tega števila
v novo zaporedje doda najmanjše število, ki je manjše ali enako
trenutnemu številu v vhodnem zaporedju, vendar novo število še ni v izhodnem
zaporedju.
def novo_zaporedje(n, vhodno_zaporedje):
"""na podlagi vhodnega zaporedja vrne izhodno zaporedje"""
izhodno_zaporedje = []
neizpisana = {i + 1 for i in range(n)}
for st_vhodno in vhodno_zaporedje:
if st_vhodno + 1 <= n:
st_vhodno = 1
neizpisana.remove(st_vhodno)
izhodno_zaporedje.append(st_vhodno)
break
else:
if st_vhodno in neizpisana:
st_vhodno += 1
else:
while True:
return izhodno_zaporedje
Vendar pa so se vrstice v funkciji zmešale. Uredi vrstice tako, da bo program
deloval pravilno.
Vhodni podatki
Funkcija novo_zaporedje(n, vhodno_zaporedje) sprejme število n, ki je naravno
število, in pa seznam vhodno_zaporedje dolžine n, ki vsebuje naravna števila
manjša ali enaka n.
Izhodni podatki
Funkcija vrne seznam dolžine n, ki vsebuje naravna števila glede na vhodno
zaporedje.
def novo_zaporedje(n, vhodno_zaporedje):
"""na podlagi vhodnega zaporedja vrne izhodno zaporedje"""
izhodno_zaporedje = []
neizpisana = {i + 1 for i in range(n)}
for st_vhodno in vhodno_zaporedje:
while True:
if st_vhodno in neizpisana:
neizpisana.remove(st_vhodno)
izhodno_zaporedje.append(st_vhodno)
break
else:
if st_vhodno + 1 <= n:
st_vhodno += 1
else:
st_vhodno = 1
return izhodno_zaporedje